package com.shujia.wyh;
import com.shujia.wyh.utils.MysqlTool;
import redis.clients.jedis.Jedis;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/*
    将redis作为缓存使用,因为我们没有现成的商品数据，就拿上午扩展的学生信息表充当商品信息表，假设1500100024-156学号的学生是热点数据

    redis的key-value设计：将频繁查询的列组合设计成redis的key,其余列作为redis的value值。
 */
public class RedisAPIDemo2 {
    public static void main(String[] args) throws Exception {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入您要查询的学生编号：");
        String id = sc.nextLine();

        //先去redis去查找该学生，key：学号  value：其余字段组成的哈希表数据类型
        //创建redis服务对象
        Jedis jedis = new Jedis("192.168.169.100", 7201);
        //选择一个数据库，从意义上就定义该数据库是专门负责学生热点数据的缓存
        jedis.select(2);

        //获取与mysql数据库的连接对象
        Connection conn = MysqlTool.getConnection();

        //根据输入的学号查询该学生
        Map<String, String> studentMap = jedis.hgetAll(id);
        System.out.println(studentMap);
        if(studentMap.size()!=0){
            System.out.println("========================================");
            System.out.println("现在走的是redis查询");
            System.out.println("========================================");
            String name = studentMap.get("name");
            String age = studentMap.get("age");
            String gender = studentMap.get("gender");
            String clazz = studentMap.get("clazz");
            System.out.println("该学生信息是："+id+","+name+","+age+","+gender+","+clazz);
        }else {
            System.out.println("========================================");
            System.out.println("现在走的是mysql查询");
            System.out.println("========================================");

            //如果是null值说明redis中没有，去mysql中找
            PreparedStatement state = conn.prepareStatement("select id,name,age,gender,clazz from students where id=?");
            state.setString(1,id);
            ResultSet resultSet = state.executeQuery();
            resultSet.next();
            String name = resultSet.getString(2);
            String age = resultSet.getString(3);
            String gender = resultSet.getString(4);
            String clazz = resultSet.getString(5);
            System.out.println("该学生信息是："+id+","+name+","+age+","+gender+","+clazz);

            //将查询到结果放到redis一份，让下一次查询的时候，直接查询redis
            //设计key和value值
            String key = id;
            //value值是一个Map集合
            HashMap<String, String> map = new HashMap<>();
            map.put("name",name);
            map.put("age",age);
            map.put("gender",gender);
            map.put("clazz",clazz);
            jedis.hset(id,map);
            jedis.expire(id,86400);
        }


    }
}
